package com.itzhouwei.commerce.thread.core.demo3;

/**
 * 线程的异常捕获类
 * @description:线程的异常捕获类 操作
 * @author：zw，微信公共号：yingshengzw
 * @date: 2021/8/28
 * @Copyright：公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、学习、分享、成长，让自己和他人都能有所收获！
 */
public class ThreadExceptionCatchDemo {
    public static void main(String[] args) {
        /***
         * 可以看到，当线程出现异常的时候，会回调到 UncaughtExceptionHandler 中，
         * 而异常回调器其实本身也是一个函数接口，当线程出现异常的时候，JVM 会默认携带线程信息和异常内容回调到这个接口中:
         * 如果我们希望当线程运行过程中出现异常后做些上报功能，可以通过采用异常捕获器的思路来实现。
         */
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("args = zw ");
                int j = 100 / 0;
            }
        });

        thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println("t = " + t.getName());
                System.out.println("t = 线程异常 ");
                e.fillInStackTrace();
            }
        });
        thread.start();
    }
}
